// The follow code is a memory manager Function // (miniOS_memory.c) and Header file(miniOS_memory.h). miniOS_memory.h #ifndef _MINI_MEM #define _MINI_MEM #define MAXMEMBLK 40 typedef struct _mini_free_memory{ unsigned int block_start_address; unsignrd int block_end_address; int usedaddress; }Mini_free_memory; typedef struct _mini_memory_manage{ Mini_free_memory free_memory_pool[MAXMEMBLK]; void (*init)(void); unsigned int allocation(void); }Mini_memory_manage; void memory_init(void); unsigned int memory_allocation(void); #endif miniOS_memory.c #include Mini_memory_manage memory_manage; #define STARTUSRSTACKADDR 0xA0400000 #define USRSTACKSIZE 0x00100000 unsigned int memory_allocation(void) { int i; for(i=0; i< MAXMEMBLK; i++) { if(memory_manage.free_memory_pool[i].usedaddress == 0) { memory_manage.free_memory_pool[i].usedaddress = 1; return memory_manage.free_memory_pool[i]. block_end_address; } } return 0; } void memory_init(void) { unsigned int pointer = STARTUSRSTACKADDR; int i; for(i=0; i< MAXMEMBLK; i++) { memory_manage.free_memory_pool[i].block_start_address = pointer; memory_manage.free_memory_pool[i].block_end_address = pointer+USRSTACKSIZE - 4; memory_manage.free_memory_pool[i].usedaddress = 0; pointer += USRSTACKSIZE; } memory_manage.init = memory_init; memory_manage.allocation = memory_allocation; } |